// 基础语法
function inc1(num) {
  return num + 1
}
// 箭头函数
const inc = num => num + 1

// 普通函数的this指向调用它的那个对象。
// var obj = {
//   name: 'obj',
//   showName: function () {
//       console.log(this.name)
//   }
// }
// obj.showName() // obj

// var obj = {
//   name: 'obj',
//   showName: () => {
//       console.log(this.name)
//   }
// }
// obj.showName() // undefined

var obj = {
  name: 'obj',
  showName: () => {
      // this指向window
      console.log(this.name)
  }
}
// 虽然使用了call，this指向依然是window
obj.showName.call(obj) // undefined

// 箭头函数不能new出来
// var demo = num => num + 1
// var d = new demo() // 这样会报错

// 普通函数使用arguments对象
function fn() {
  console.log(arguments)
}
fn(1,2,3,4) // { '0': 1, '1': 2, '2': 3, '3': 4 }

// 箭头函数没有arguments对象，使用reset来实现
const fn2 = (...reset) => console.log(reset)
fn2(1,2,3,4) // [ 1, 2, 3, 4 ]


// 箭头函数不能作为Generator函数，不能使用yield关键字


// 多重箭头函数就是一个高阶函数，相当于内嵌函数
const add = x => y => {
  return x + y
}
// 相当与
function add2(x){
  return function(y){
    return y + x;
  };
}
console.log(add(2)(3))
console.log(add2(2)(3))


// 什么叫对象字面量
// 定义一个对象
const obj = new Object()
// 实际开发过程中，经常这样写
const obj = {}
// 类似上面的大括号{}就叫对象字面量

// 属性的增强写法
// 定义name age 两个属性
const name = 'levy'
const age = 20

// ES5写法
const preson = {
  name: name,
  age: age
}
// ES6
const preson = { // 给person添加两个属性，值从同名变量找
  name,
  age
}
// 函数的增强写法
//ES5写法
const name = "yuan";
const obj = {
  getName: function(){
    console.log("my name is " + name);
  }
}
//ES6写法 省略: function
const name = "yuan";
const obj = {
  getName(){
    console.log("my name is " + name);
  }
}  